import Config from '../utils/Config.js';
import CardManager from './CardManager.js';
import ScoreManager from './ScoreManager.js';

/**
 * 游戏管理器
 * 负责游戏逻辑控制和状态管理
 */
export default class GameManager {
    constructor(uiManager) {
        this.uiManager = uiManager;
        this.cardManager = null;
        this.scoreManager = null;
        this.gameState = 'ready'; // ready, playing, paused, gameover
        this.targetNumber = 0;
        this.currentLevel = 1;
        this.gameLoop = null;
    }

    /**
     * 启动游戏
     */
    start() {
        console.log('游戏管理器启动...');
        
        // 初始化子管理器
        this.cardManager = new CardManager(this);
        this.scoreManager = new ScoreManager(this);
        
        // 初始化游戏数据
        this.initGameData();
        
        // 开始游戏循环
        this.startGameLoop();
        
        this.gameState = 'playing';
        console.log('游戏管理器启动完成');
    }

    /**
     * 初始化游戏数据
     */
    initGameData() {
        // 设置目标数字
        this.targetNumber = this.generateTargetNumber();
        
        // 初始化卡片
        this.cardManager.initCards();
        
        // 重置分数
        this.scoreManager.reset();
        
        // 更新UI显示
        this.updateUI();
    }

    /**
     * 生成目标数字
     */
    generateTargetNumber() {
        // 根据关卡生成合适的目标数字
        const baseNumbers = [10, 20, 30, 50, 100];
        return baseNumbers[Math.floor(Math.random() * baseNumbers.length)];
    }

    /**
     * 开始游戏循环
     */
    startGameLoop() {
        const gameLoop = () => {
            if (this.gameState === 'playing') {
                this.update();
                this.render();
            }
            requestAnimationFrame(gameLoop);
        };
        
        requestAnimationFrame(gameLoop);
    }

    /**
     * 更新游戏逻辑
     */
    update() {
        // 更新卡片状态
        this.cardManager.update();
        
        // 检查游戏结束条件
        this.checkGameEnd();
    }

    /**
     * 渲染游戏
     */
    render() {
        this.uiManager.render();
    }

    /**
     * 检查游戏结束条件
     */
    checkGameEnd() {
        // 检查是否达成目标
        if (this.scoreManager.getCurrentScore() >= this.targetNumber) {
            this.onLevelComplete();
        }
        
        // 检查是否无法继续游戏
        if (!this.cardManager.hasValidMoves()) {
            this.onGameOver();
        }
    }

    /**
     * 关卡完成
     */
    onLevelComplete() {
        console.log('关卡完成！');
        this.currentLevel++;
        this.initGameData();
    }

    /**
     * 游戏结束
     */
    onGameOver() {
        console.log('游戏结束！');
        this.gameState = 'gameover';
    }

    /**
     * 更新UI显示
     */
    updateUI() {
        // TopBar现在只显示固定的目标数字，不需要更新
        // 如果需要标记某个目标数字为完成状态，可以调用：
        // const topBar = this.uiManager.getComponent('topBar');
        // if (topBar) {
        //     topBar.markTargetCompleted(targetNumber);
        // }
    }

    /**
     * 处理卡片选择
     */
    onCardSelected(card) {
        console.log('卡片被选择:', card);
        // 将选择逻辑委托给卡片管理器
        this.cardManager.selectCard(card);
    }

    /**
     * 处理计算操作
     */
    onCalculate(operation) {
        console.log('执行计算:', operation);
        const result = this.cardManager.performCalculation(operation);
        if (result !== null) {
            this.scoreManager.addScore(result);
            this.updateUI();
        }
    }

    /**
     * 获取游戏状态
     */
    getGameState() {
        return this.gameState;
    }

    /**
     * 获取目标数字
     */
    getTargetNumber() {
        return this.targetNumber;
    }

    /**
     * 获取当前关卡
     */
    getCurrentLevel() {
        return this.currentLevel;
    }
}
